#include "stm32f10x.h"                  // Device header

/**
  * 函    数：PWM初始化（修改为PB8/TIM4 CH3、PB9/TIM4 CH4）
  * 参    数：无
  * 返 回 值：无
  * 引脚对应：PB8 → TIM4通道3，PB9 → TIM4通道4
  */
void PWM_Init(void)
{
	/*1. 开启时钟（修改：定时器TIM4、GPIO端口GPIOB）*/
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);			//TIM4属于APB1总线，开启其时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);			//GPIOB属于APB2总线，开启其时钟
	
	/*2. GPIO初始化（修改：端口GPIOB，引脚PB8、PB9）*/
	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;				//复用推挽输出（定时器控制需复用模式）
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9;			//指定PB8、PB9引脚
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;				//GPIO速度50MHz（不变）
	GPIO_Init(GPIOB, &GPIO_InitStructure);							//初始化GPIOB端口
	
	/*3. 配置时钟源（修改：定时器TIM4）*/
	TIM_InternalClockConfig(TIM4);		//选择TIM4为内部时钟（默认也是内部时钟，显式配置更清晰）
	
	/*4. 时基单元初始化（修改：定时器TIM4，参数不变）*/
	TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;			
	TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;     //时钟不分频（滤波器时钟不影响时基）
	TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up; //向上计数模式（不变）
	TIM_TimeBaseInitStructure.TIM_Period = 20000 - 1;				//ARR=19999（PWM周期=20ms，适配舵机等场景）
	TIM_TimeBaseInitStructure.TIM_Prescaler = 72 - 1;				//PSC=71（定时器时钟=72MHz/(71+1)=1MHz）
	TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0;            //重复计数器（高级定时器用，此处为0）
	TIM_TimeBaseInit(TIM4, &TIM_TimeBaseInitStructure);             //初始化TIM4时基单元
	
	/*5. 输出比较初始化（修改：TIM4通道3、4，替换原通道1、2）*/ 
	TIM_OCInitTypeDef TIM_OCInitStructure;						
	TIM_OCStructInit(&TIM_OCInitStructure);                         //结构体默认初始化（避免未赋值成员异常）
	TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;               //PWM模式1（计数器<CCR时输出高电平）
	TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;       //输出极性高（不变，低极性会翻转电平）
	TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;   //输出使能（不变）
	TIM_OCInitStructure.TIM_Pulse = 0;								//初始CCR=0（PWM占空比0%）
	TIM_OC3Init(TIM4, &TIM_OCInitStructure);                        //配置TIM4通道3（对应PB8）
	TIM_OC4Init(TIM4, &TIM_OCInitStructure);                        //配置TIM4通道4（对应PB9）
	
	/*6. 定时器使能（修改：定时器TIM4）*/
	TIM_Cmd(TIM4, ENABLE);			//使能TIM4，定时器开始运行
}

/**
  * 函    数：PWM设置TIM4通道3（PB8）的CCR值
  * 参    数：Compare 要写入的CCR值，范围：0~19999（对应占空比0%~100%）
  * 返 回 值：无
  * 占空比公式：Duty = Compare / (ARR + 1) = Compare / 20000
  */
void PWM_SetCompare3(uint16_t Compare)
{
	TIM_SetCompare3(TIM4, Compare);		//设置TIM4通道3的CCR值（对应PB8）
}

/**
  * 函    数：PWM设置TIM4通道4（PB9）的CCR值
  * 参    数：Compare 要写入的CCR值，范围：0~19999（对应占空比0%~100%）
  * 返 回 值：无
  * 占空比公式：Duty = Compare / (ARR + 1) = Compare / 20000
  */
void PWM_SetCompare4(uint16_t Compare)
{
	TIM_SetCompare4(TIM4, Compare);		//设置TIM4通道4的CCR值（对应PB9）
}

